/**
 * 构造函数 Person
 */
function Person() {
    this.name = '中国人'
    this.pets = ['小煤球', 'java']
}
Person.prototype.run = function (params) {
    console.log("跑");
}

/**
 * 构造函数 Student
 */
function Student() {
    //1.构造函数继承
    Person.call(this)
    this.num = '学号'
}

//2.原型链继承
// 1.构造父类的实例
const person = new Person()
// 2.改变子类的原型对象为父类实例
Student.prototype = person
// 3.修改constructor指向
Student.prototype.constructor = Student


//组合继承的缺点：
//1.实例对象上的属性会屏蔽其原型对象上相同的属性，所以组合模式的缺点是：
//在使用子类创建实例对象是，其原型对象中会存在两份相同的属性/方法。

const p1 = new Student()


p1.pets.push('小猫')
console.log(p1);
console.log(p1.name);
p1.run()


const p2 = new Student()
console.log(p2);